﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Oracle.DataAccess.Client;
using Oracle.DataAccess.Types;

namespace devoirBD2
{
    public class Fournisseur
    {
        //champs de la table
        private long idFournisseur;
        private string nomFournisseur;
        private string adresse;
        private string ville;
        private string province;
        private string pays;
        private string codePostal;
        private string telephone;
        private List<ProduitFournisseur> produits;

        public Fournisseur(long idFournisseur, string nomFournisseur, string adresse, string ville, string province, string pays, string codePostal, string telephone)
        {
            this.idFournisseur = idFournisseur;
            this.nomFournisseur = nomFournisseur;
            this.adresse = adresse;
            this.ville = ville;
            this.province = province;
            this.pays = pays;
            this.codePostal = codePostal;
            this.telephone = telephone;
            produits = new List<ProduitFournisseur>();
        }

        public string[] getLigne()
        {
            return new string[]{
                nomFournisseur.ToString(),
                adresse.ToString(),
                ville.ToString(),
                province.ToString(),
                pays.ToString(),
                codePostal.ToString().Substring(0,3) + " " + codePostal.ToString().Substring(3,3),
                telephone.ToString().Substring(0,3) + "-" + telephone.ToString().Substring(3,3) + "-" + telephone.ToString().Substring(6,4)
            };
        }

        public bool compareFour(string _nomFournisseur, string _adresse, string _ville, string _province, string _pays, string _codePostal, string _telephone)
        {
            bool ajout = true;

            if (_nomFournisseur!=null && !nomFournisseur.ToString().Contains(_nomFournisseur))
            {
                ajout = false;
            }
            if (_adresse != null && !adresse.ToString().Contains(_adresse))
            {
                ajout = false;
            }
            if (_ville != null && !ville.ToString().Contains(_ville))
            {
                ajout = false;
            }
            if (_province != null && !province.ToString().Contains(_province))
            {
                ajout = false;
            }
            if (_pays != null && !pays.ToString().Contains(_pays))
            {
                ajout = false;
            }
            if (_codePostal != null && !codePostal.ToString().Contains(_codePostal))
            {
                ajout = false;
            }
            if (_telephone != null && !telephone.ToString().Contains(_telephone))
            {
                ajout = false;
            }
            return ajout;
        }
        public override string ToString()
        {
            return nomFournisseur;
        }

        public long getIdFournisseur()
        {
            return idFournisseur;
        }

        public string getNomFournisseur()
        {
            return nomFournisseur;
        }

        public void loadProduits(long[] excludes)
        {
            produits.Clear();

            string query = "SELECT idproduit, nomproduit, prix ";
            query += "FROM (SELECT idproduit, prix FROM produitfournisseur WHERE idfournisseur = " + idFournisseur.ToString();
            if(excludes.Length > 0)
            {
                query += " AND idproduit NOT IN (";
                for (int i = 0; i < excludes.Length; i++)
                {
                    if (i != 0)
                    {
                        query += ",";
                    }
                    query += excludes[i].ToString();
                }
                query += ")";
            }
            
            query += ") ";
            query += "NATURAL INNER JOIN (SELECT idproduit, nomproduit FROM produit) ";

            Bd bd = Bd.getInstance();

            bd.openConnection();

            OracleDataReader dr = bd.executeReader(query);

            while (dr.Read())
            {
                ProduitFournisseur prod = new ProduitFournisseur(this,
                                            Bd.valideLong(dr["idproduit"]),
                                            Bd.valideString(dr["nomproduit"]),
                                            Bd.valideDecimal(dr["prix"]));

                produits.Add(prod);
            }

            bd.closeConnection();
        }

        public List<ProduitFournisseur> getProduits()
        {
            return produits;
        }
    }
}
